#ifndef NINTERFACESIMDATABASE_H
#define NINTERFACESIMDATABASE_H

#include <QtSql>
#include "ninterfacedatabase.h"

//реализация интерфейсов (одна из возможных;)

class IUserAuthImpl : public IUserAuth   //система проверки авторизованности
{
public:
    IUserAuthImpl() { }

    //методы!
    QByteArray generateKey(int userId, QByteArray pass)
    {
        return QCryptographicHash::hash(pass, QCryptographicHash::Md5).toHex();
    }

     ~IUserAuthImpl() { }
};

class IDatabaseImpl : public IDatabase
{
private:
    QSqlDatabase db;
    IUserAuth *userAuthSystem;

public:
    IDatabaseImpl()
    {
        //инициализация используемого интерфейса
        userAuthSystem = new IUserAuthImpl;
    }

    //методы!
    bool doInit(QString dbPath)      //инициализация БД
    {
        QSqlDatabase::database("db_unn_con", false).close();
        QSqlDatabase::removeDatabase("db_unn_con");
        db = QSqlDatabase::addDatabase("QSQLITE", "db_unn_con");
        db.setDatabaseName(dbPath);
        return db.open();
    }

    QSqlQuery exec(QString sqlCmd) //выполнение SQL зароса
    {
        return db.exec(sqlCmd);
    }

    QStringList tables()
    {
        return db.tables();
    }

    QSqlError lastError()
    {
        return db.lastError();
    }

    QByteArray generateAuthKey(int userId, QByteArray pass)
    {       //very simple now:)

        return userAuthSystem->generateKey(userId, pass);
    }

    ~IDatabaseImpl()
    {
        delete userAuthSystem;
        db.close();
    }
};


#endif
